Many computer applications contain unreliable components, often times in the form of binary extensions or third party code. An application that hosts unreliable components may be subject to reliability characteristics of the unreliable component. Consider, for example, a web browser application (e.g. Internet Explorer® by Microsoft Corporation) that may be configured to navigate a wide variety of different content available via the Internet (e.g. web pages, music, online videos) and display this content in one or more separate web browser windows, or “tabs”. In some instances, this Internet content may be configured as extension code which can extend the function of the web browser application itself (e.g. “plug-ins”, “third-party plug-ins”, “add-ons”). This extension code, however, may have an adverse effect on the execution of the web browser application, even to the point of failure.
Consider, for example, a browser application that receives a third-party component (e.g. third-party plug-in) to expand the functionality of the browser application. Because it is a third-party component, it may be written according to quality standards that do not meet the standards of a writer of the browser application. Accordingly, the component may fail when executed in conjunction with the browser application. Because the component is extension code that may share resources with the browser application, failure of the component may cause failure of the browser application, such as a crash or a “hang”. Oftentimes, components may be displayed as tabs within the browser application, each being executed as a separate component. Failure of one tab, in this instance, may cause other components displayed as tabs to fail as well.
In addition to web browser applications, some computer applications may be configured with a multiple document interface that hosts multiple copies of itself for each open document. Consider, for example, the program Excel® by Microsoft Corporation, which may include multiple open spreadsheet documents at one time. If code that is hosting one of these documents fails, all of the other documents in the application may fail as well.
Some computer applications can be isolated into multiple components so that when one component experiences a failure, the impact of the failure can be limited to that component. Thus, if one component experiences a failure, the application can continue to execute by isolating and terminating the single failed component.
Even applications that can be isolated into multiple components, however, may be susceptible to crashing when a synchronous function call is placed to an unresponsive or hung component because synchronous function calls may block execution of the entire application until the application component responds to the function call. For instance, if a synchronous function call is placed to a hung component, the hung component will be unable to respond to the function call which may cause the entire application to hang awaiting a response from the component.